package com.ikas.ai.utils;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @ClassName: LocalDateTimeUtil
 * @Description: 日期时间处理公共类.(java8)
 * @author HXH
 * @date 2020-09-08 02:08:36
 */
public class LocalDateTimeUtil {
	
    public static final String MONTHFORMATTPL = "yyyyMM";
    public static final String DATEFORMATTPL = "yyyy-MM-dd";
    public static final String DATETIMEFORMATTPL = "yyyy-MM-dd HH:mm:ss";
    public static final String DATETIMEUTCFORMATTPL = "yyyy-MM-dd'T'HH:mm:ss";
    public static final String DATETIMEMSFORMATTPL = "yyyy-MM-dd HH:mm:ss.SSS";
    public static final String SIMPLEDATEFORMATTPL = "yyyyMMdd";
    public static final String SIMPLEDATETIMEFORMATTPL = "yyyyMMddHHmmss";
    public static final String SIMPLEDATETIMESHORTYEARFORMATTPL = "yyMMddHHmmss";
    public static final String SIMPLEDATETIMEUTCFORMATTPL = "yyyyMMdd'T'HHmmss'Z'";
    public static final String SIMPLEDATETIMEMINUTEFORMATTPL = "yyyyMMddHHmm";
    public static final String TIMESIMPLEFORMATTPL = "HH:mm";
    public static final String TIMEFORMATTPL = "HH:mm:ss";

    private LocalDateTimeUtil() {

    }

    /**
     * 日期格式。
     *
     * @return 日期格式
     */
    public static String getDatePattern() {
        return DATEFORMATTPL;
    }

    /**
     * 时间格式。
     *
     * @return 时间格式
     */
    public static String getTimePattern() {
        return TIMEFORMATTPL;
    }

    /**
     * 简单时间格式。
     *
     * @return 简单时间格式
     */
    public static String getSimpleTimePattern() {
        return TIMESIMPLEFORMATTPL;
    }

    /**
     * 日期时间格式。
     *
     * @return 时间日期格式
     */
    public static String getDateTimePattern() {
        return DATETIMEFORMATTPL;
    }

    /**
     * 获得当前时间的日期时间
     *
     * @return Date
     */
    public static LocalDateTime getCurDateTime() {
        return LocalDateTime.now();
    }
    
    /**
     * 根据输入日期时间字符串获得日期时间
     *
     * @return Date
     */
    public static LocalDateTime getDateTime(String dateStr) {
        return LocalDateTime.parse(dateStr);
    }
    
    /**
     * 根据输入日期时间格式获得日期时间
     *
     * @return Date
     */
    public static LocalDateTime getDateTime(String dateStr, String formatStr) {
    	DateTimeFormatter df = DateTimeFormatter.ofPattern(formatStr);
        return LocalDateTime.parse(dateStr, df);
    }
    
    /**
     * @Title: formatCurDateTime
     * @Description:  获取当前时间的日期时间
     * @param 日期格式
     * @return
     * @author HXH
     * @date 2020-09-07 01:00:41
     */
    public static String formatCurDateTime(String formatStr) {
    	return formatDateTime(LocalDateTime.now(), formatStr);
    }
    
    /**
     * @Title: formatDateTime
     * @Description: 格化式日期时间
     * @param date 输入日期时间
     * @param formatStr 输出日期时间格式
     * @return
     * @author HXH
     * @date 2020-09-07 01:02:35
     */
    public static String formatDateTime(LocalDateTime date, String formatStr) {
    	DateTimeFormatter format = DateTimeFormatter.ofPattern(formatStr);
        return format.format(date);
    }
    
    /**
     * @Title: convertZoneDateTime
     * @Description: 日期时间转换时区
     * @param date 输入日期时间
     * @param fromZone 源时区
     * @param toZone 目标时区
     * @return
     * @author HXH
     * @date 2020-09-07 11:46:47
     */
    public static LocalDateTime convertDateTimeZone(LocalDateTime date, ZoneId fromZone, ZoneId toZone) {
        ZonedDateTime zonedtime = date.atZone(fromZone);
        ZonedDateTime converted = zonedtime.withZoneSameInstant(toZone);
        return converted.toLocalDateTime();
    }
    
    /**
     * @Title: convertZoneDateTime
     * @Description: 日期时间转换时区
     * @param date 输入日期时间
     * @param fromZone 源时区
     * @return
     * @author HXH
     * @date 2020-09-07 01:13:05
     */
    public static LocalDateTime convertDateTimeZone(LocalDateTime date, ZoneId fromZone) {
        return convertDateTimeZone(date, fromZone, ZoneId.systemDefault());
    }
}
